import axios from 'axios'
import {ElMessage} from 'element-plus'
import router from '@/router'

const api = axios.create({
    baseURL: import.meta.env.VITE_SERVER + '/', // 所有请求的公共地址部分
    timeout: 3 * 1000 // 请求超时时间 这里的意思是当请求时间超过5秒还未取得结果时 提示用户请求超时
})

// 请求相关处理 请求拦截 在请求拦截中可以补充请求相关的配置
// interceptors axios的拦截器对象
api.interceptors.request.use(config => {
    // @ts-ignore
    var tokenName = localStorage.getItem('tokenName')
    var tokenValue = localStorage.getItem('tokenValue')
    if (tokenName && tokenValue) {
        // @ts-ignore
        config.headers[tokenName] = tokenValue
    }
    return config // 将配置完成的config对象返回出去 如果不返回 请求讲不会进行
}, err => {
    // 请求发生错误时的相关处理 抛出错误
    Promise.reject(err)
})


// @ts-ignore
api.interceptors.response.use((res: any) => {
        var str = '服务器错误'
        if (res.data.code === 200) {
            return Promise.resolve(res.data.data)
        } else if (res.data.code === 401) {
            str = '登录权限已过期，请重新登录'
            ElMessage({
                message: str,
                type: 'error',
            })
            setTimeout(() => {
                router.push('/login')
            }, 1200)
            return Promise.reject(res)
        } else {
            str = res.data.msg
            ElMessage({
                message: str,
                type: 'error',
            })
            return Promise.reject(res)
        }
    },
    err => {
        var str = '服务器错误'
        if (err.response === undefined) {
            str = err.message
        } else if (err.response.status === 404) {
            str = '404请求地址不存在'
        } else if (err.response.status === 401) {
            str = '登录权限已过期，请重新登录'
            setTimeout(() => {
                router.push('/admin-login')
            }, 1500)
        } else if (err.response.status === 400 || err.response.status === 403) {
            str = '请求错误'
        }
        ElMessage({
            message: str,
            type: 'error',
        })
        return Promise.reject(err)
    }
)

export default api
